package com.tony.juc;

import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReferenceArray;

/**
 * Created with IntelliJ IDEA.
 *
 * @Title: AtomicReferenceArrayDemo001
 * @Auther: 皮蛋布丁
 * @Date: 2022/04/04/23:29
 * @Description: 数组操作原子类
 */
public class AtomicReferenceArrayDemo001 {

    public static void main(String[] args) throws Exception {
        String datas[] = new String[]{"TonyZhu","NalsonZhu","Take_Care"};

        //使用String数组来时间原子数组操作类对象的实例化处理
        /*AtomicReferenceArray<String> array = new AtomicReferenceArray<>(datas); //获取原子类
        System.out.println("【原子数据修改】数据修改的结果：" + array.compareAndSet(2,"Take_Care","Tony"));
        System.out.print("【原子数据获取】数组内容：");
        for (int i = 0; i < array.length(); i++) {
            System.out.print(array.get(i) + "、");
        }*/

        /*VarHandle varHandle = MethodHandles.arrayElementVarHandle(String[].class);  //获取VarHandle
        //依旧是CAS(CompareAndSet)的处理方法，依然要通过CPU指令来执行相关的处理，性能是最高的
        varHandle.compareAndSet(datas,1,"NalsonZhu","Tony");//修改数据
        System.out.println(Arrays.toString(datas));*/

        //此时通过类的查找机制找到Book类中的Title属性，同时设置号Title属性的对应的数据类型
        VarHandle varHandle = MethodHandles.lookup().findVarHandle(Book.class,"title",String.class);
        //所有类的对象的属性操作前提就是要进行有效的对象实例化处理
        Object obj = Book.class.getDeclaredConstructor().newInstance();//对象实例化
        varHandle.set(obj,"Java就业编程实战"); //设置属性内容
        System.out.println("【获取属性内容】title=" + varHandle.get(obj)); //直接获取属性


    }

}
class Book {
    String title; //此时没有进行封装，因为封装了操作不了
}
